Download registry packages on `cargo fetch`
authorAlex Crichton <alex@alexcrichton.com>
Tue, 24 Feb 2015 00:14:34 +0000 (16:14 -0800)
committerAlex Crichton <alex@alexcrichton.com>
Tue, 24 Feb 2015 00:14:34 +0000 (16:14 -0800)
Closes #1329

src/cargo/ops/cargo_fetch.rs
src/registry/lib.rs
tests/test_cargo_registry.rs

index 682d84f43401c157244b2a1ecec6c13ba11142e9..9ba0f00587ba338d53cde09766fdad3cc4957b4d 100644 (file)
@@ -1,8 +1,8 @@
 use core::registry::PackageRegistry;
-use core::source::Source;
+use core::{Source, PackageId};
 use ops;
 use sources::PathSource;
-use util::{CargoResult, Config};
+use util::{CargoResult, Config, human, ChainError};
 
 /// Executes `cargo fetch`.
 pub fn fetch(manifest_path: &Path, config: &Config) -> CargoResult<()> {
@@ -12,6 +12,11 @@ pub fn fetch(manifest_path: &Path, config: &Config) -> CargoResult<()> {
     let package = try!(source.root_package());
 
     let mut registry = PackageRegistry::new(config);
-    try!(ops::resolve_pkg(&mut registry, &package));
+    let resolve = try!(ops::resolve_pkg(&mut registry, &package));
+
+    let ids: Vec<PackageId> = resolve.iter().cloned().collect();
+    try!(registry.get(&ids).chain_error(|| {
+        human("unable to get packages from source")
+    }));
     Ok(())
 }
index 887264fc535a21055b23340932d2e3c2844b4621..75b89624f49c76bbbcb74f18e9f0bdf18aa0b5e2 100644 (file)
@@ -1,4 +1,4 @@
-#![feature(core, io)]
+#![feature(core, io, path)]
 
 extern crate curl;
 extern crate "rustc-serialize" as rustc_serialize;
index 8e2435351aa5fde175572d2337960f6bb1d83b63..7db4eb9dcc522bf9c95f47c30c24b7e4a655e8b3 100644 (file)
@@ -707,3 +707,27 @@ test!(update_publish_then_update {
    dir = p.url()).as_slice()));
 
 });
+
+test!(fetch_downloads {
+    let p = project("foo")
+        .file("Cargo.toml", r#"
+            [project]
+            name = "foo"
+            version = "0.5.0"
+            authors = []
+
+            [dependencies]
+            a = "0.1.0"
+        "#)
+        .file("src/main.rs", "fn main() {}");
+    p.build();
+
+    r::mock_pkg("a", "0.1.0", &[]);
+
+    assert_that(p.process(cargo_dir().join("cargo")).arg("fetch"),
+                execs().with_status(0)
+                       .with_stdout(format!("\
+{updating} registry `[..]`
+{downloading} a v0.1.0 (registry [..])
+", updating = UPDATING, downloading = DOWNLOADING)));
+});